//
//  ZMHorizontalGridViewLayout.m
//  Pods
//
//  Created by pg on 2017/9/13.
//
//

#import "ZMHorizontalGridViewLayout.h"

@interface ZMHorizontalGridViewLayout ()

@property (assign, nonatomic)   CGSize      contentSize;

// 存储的布局属性容器
@property (strong, nonatomic)   NSMutableArray<UICollectionViewLayoutAttributes *>      *attributes;

@end


@implementation ZMHorizontalGridViewLayout
- (NSMutableArray<UICollectionViewLayoutAttributes *> *)attributes {
    if(_attributes == nil){
        _attributes = [NSMutableArray array];
    }
    return _attributes;
}

// 获取一共多少项
- (NSInteger)numberOfItems {
    return [self.collectionView numberOfItemsInSection:0];
}

// 获取一共多少页
- (NSInteger)numberOfPages {
    // 每页多少项目
    NSInteger numberOfItemPerPage = self.row * self.column;
    NSInteger count = [self numberOfItems];
    
    // ceil 向上取整
    // floor 向下取整
    
    return (count % numberOfItemPerPage) == 0 ? (count / numberOfItemPerPage) : (floor(count * 1.0 / numberOfItemPerPage) + 1);
}

- (void)prepareLayout {
    // 在布局之前准备工作
    // 1. 计算contentSize
    // 1.1 计算出多少页
    NSInteger pageCount = [self numberOfPages];
    // 1.2 通过页数计算 contentSize
    self.contentSize = CGSizeMake( self.collectionView.frame.size.width * pageCount, self.collectionView.frame.size.height);
    
    // 2. 为自定义布局提供布局信息 ->  Cell 使用
    // 预先把所有需要 Cell 的布局属性全部计算好
    // 把 Cell 布局的信息提取出来单独使用
    
    float width = self.collectionView.frame.size.width / self.column;
    float height = self.collectionView.frame.size.height / self.row;
    
    // 表示循环页数
    for (NSInteger i = 0; i < pageCount; i ++) {
        // 行下标
        for (NSInteger rowIndex = 0; rowIndex < self.row; rowIndex ++) {
            // 列下标
            for (NSInteger columnIndex = 0; columnIndex < self.column; columnIndex ++) {
                
                NSInteger itemIndex = i * self.row * self.column + rowIndex * self.column + columnIndex;
                
                // 2.1 创建一个布局属性
                // 注意必须 设置section
                UICollectionViewLayoutAttributes *attribute = [UICollectionViewLayoutAttributes layoutAttributesForCellWithIndexPath:[NSIndexPath indexPathForRow:itemIndex inSection:0]];
                
                CGFloat x = floor(itemIndex * 1.0 / (self.row * self.column)) + columnIndex * width + i * self.collectionView.frame.size.width;
                
                NSLog(@"%f",floor(itemIndex * 1.0 / (self.row * self.column)));
                
                CGFloat y = (rowIndex %  self.row) * height;
                
                // 2.2 为布局属性添加基本的一些属性
                attribute.frame = CGRectMake(x, y, width, height);
                
                // 2.3 把计算好的属性添加到与计算容器中
                [self.attributes addObject:attribute];
                
                if(itemIndex >= [self numberOfItems] - 1) {
                    return;
                }
                
            }
        }
    }
    
    
}


// 返回当前 CollectionView 所需要的 ContentSzie
- (CGSize)collectionViewContentSize {
    return self.contentSize;
}

// 当滚动到视图可以见区域时需要的 cell 布局属性
- (NSArray<UICollectionViewLayoutAttributes *> *)layoutAttributesForElementsInRect:(CGRect)rect {
    
    NSMutableArray *attrs = [NSMutableArray array];
    
    // 过滤出和 rect 相交的布局属性
    
    [self.attributes enumerateObjectsUsingBlock:^(UICollectionViewLayoutAttributes * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        if(CGRectIntersectsRect(rect, obj.frame)) {
            [attrs addObject:obj];
        }
    }];
    
    return attrs;
}


@end
